/*
 *  Copyright (c) 2017. 郑州仁中和科技有限公司.保留所有权利.
 *                        http://www.rzhkj.com/
 *        郑州仁中和科技有限公司保留所有代码著作权.如有任何疑问请访问官方网站与我们联系.
 *        代码只针对特定客户使用，不得在未经允许或授权的情况下对外传播扩散.恶意传播者，法律后果自行承担.
 *        本代码仅用于龐帝業務系统.
 *
 */

package com.rzhkj.core.base;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTCreationException;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.rzhkj.core.tools.DateTools;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.util.*;
import java.util.concurrent.TimeUnit;

/**
 * Created by lixin on 2017/9/13.
 */
@Data
@Slf4j
public class JwtToken {

    private long expireMinutes = 30L;//30分钟
    private String secret = "ZhengZhouRenZhongHeKeJi315@rzhkj.com";
    private String token;

    public JwtToken() {
    }

    public JwtToken expireMinutes(long expireMinutes) {
        this.expireMinutes = expireMinutes;
        return this;
    }

    public JwtToken secret(String secret) {
        this.secret = secret;
        return this;
    }

    public JwtToken token(String token) {
        this.token = token;
        return this;
    }

    /**
     * 验证token
     *
     * @return true/false
     */
    public boolean verifier() {
        try {
            Algorithm algorithm = Algorithm.HMAC256(secret);
            JWTVerifier verifier = JWT.require(algorithm)
                    .build();
            DecodedJWT jwt = verifier.verify(token);
            log.info("verifier token ==============================================");
            log.info(jwt.getToken());
            log.info(jwt.getHeader());
            log.info(jwt.getPayload());
            log.info(jwt.getSignature());
            log.info("verifier token ==============================================");
            if (jwt != null && jwt.getToken().equals(token)) {
                return true;
            } else {
                return false;
            }
        } catch (JWTVerificationException exception) {
            exception.printStackTrace();
        }
        return false;
    }


    /**
     * 验证token
     *
     * @param token
     * @return true/false
     */
    public boolean verifier(String token) {
        try {
            Algorithm algorithm = Algorithm.HMAC256(secret);
            JWTVerifier verifier = JWT.require(algorithm)
                    .build();
            DecodedJWT jwt = verifier.verify(token);
            log.info("verifier token ==============================================");
            log.info(jwt.getToken());
            log.info(jwt.getHeader());
            log.info(jwt.getPayload());
            log.info(jwt.getSignature());
            log.info("verifier token ==============================================");
            if (jwt != null && jwt.getToken().equals(token)) {
                return true;
            } else {
                return false;
            }
        } catch (JWTVerificationException exception) {
            exception.printStackTrace();
        }
        return false;
    }


    /**
     * 获取token 值
     *
     * @param key 验证值key
     * @return true/false
     */
    public String getTokenValue(String key) {
        try {
            Algorithm algorithm = Algorithm.HMAC256(secret);
            JWTVerifier verifier = JWT.require(algorithm)
                    .build();
            DecodedJWT jwt = verifier.verify(token);
            log.info("verifier token ==============================================");
            Claim claim = jwt.getClaim(key);
            log.info(claim.asString());
            String value = claim.asString();
            return value;
        } catch (JWTVerificationException exception) {
            exception.printStackTrace();
        }
        return null;
    }


    /**
     * 获取token 值
     *
     * @param token
     * @param key   验证值key
     * @return true/false
     */
    public String getTokenValue(String token, String key) {
        try {
            Algorithm algorithm = Algorithm.HMAC256(secret);
            JWTVerifier verifier = JWT.require(algorithm)
                    .build();
            DecodedJWT jwt = verifier.verify(token);
            log.info("verifier token ==============================================");
            Claim claim = jwt.getClaim(key);
            log.info(claim.asString());
            String value = claim.asString();
            return value;
        } catch (JWTVerificationException exception) {
            exception.printStackTrace();
        }
        return null;
    }


    /**
     * 创建token
     *
     * @param key   token key
     * @param value token 值
     * @return
     */
    public String createToken(String key, String value) {
        try {
            Algorithm algorithm = Algorithm.HMAC256(secret);
            Date now = new Date();
            Date expires = new Date(now.getTime() + TimeUnit.MINUTES.toMillis(expireMinutes));
            log.info(DateTools.yyyyMMddHHmmss(expires));
            String token = JWT.create()
                    .withExpiresAt(expires)
                    .withClaim(key, value)
                    .sign(algorithm);
            log.info("create token==============================================");
            log.info(token);
            log.info("==============================================");
            return token;
        } catch (JWTCreationException exception) {
            exception.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        JwtToken jwtToken = new JwtToken();
        Map<String, Object> param = new HashMap<>();
        param.put("client_id", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MzEyMTI5OTMsImNsaWVudF9pZCI6ImM1ZjA0NjE1LTc3MzktNDI2Ny04NzdjLWJlZGQ5YWI3ZmVkMyJ9.qjXbUzZrJv4U-h-pMyA8W3sI3MtyW89_9H-p8gtddrAeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MzEyMTI5OTMsImNsaWVudF9pZCI6ImM1ZjA0NjE1LTc3MzktNDI2Ny04NzdjLWJlZGQ5YWI3ZmVkMyJ9.qjXbUzZrJv4U-h-pMyA8W3sI3MtyW89_9H-p8gtddrAeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MzEyMTI5OTMsImNsaWVudF9pZCI6ImM1ZjA0NjE1LTc3MzktNDI2Ny04NzdjLWJlZGQ5YWI3ZmVkMyJ9.qjXbUzZrJv4U-h-pMyA8W3sI3MtyW89_9H-p8gtddrAeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MzEyMTI5OTMsImNsaWVudF9pZCI6ImM1ZjA0NjE1LTc3MzktNDI2Ny04NzdjLWJlZGQ5YWI3ZmVkMyJ9.qjXbUzZrJv4U-h-pMyA8W3sI3MtyW89_9H-p8gtddrA");
        param.put("boxcode", "c5f04615-7739-4267-877c-bedd9ab7fed3");
        param.put("apikey", "0000000000000000000000");
        List<Map<String, Object>> mapList = new ArrayList<>();
        Map<String, Object> param1 = new HashMap<>();
        param1.put("isCache", 1);
        param1.put("isCover", 2);
        param1.put("size", 520);
        param1.put("mediaType", "JPG");
        param1.put("file", "/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAH7AgUDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAEpvme1Ob7pqKmhof5ntR5ntTKWmMd5ntS7qZinBaAF3UbqSigBd1G6kooAXdRupuRS0AKWx2pPM9qRqbQBJuo3UlFFgsLuo3UlFFgsKHz2o3UlFFgsLuo3UlFFgsLuo3UlFFgsLuo3UlFFgsLuo3UlFFgsLuo3UlFFgsLuo3UlFFgsLuo3UlLx60aBoG6jdRt96OKWgtA3UbqSimMXdRupKKAF3UbqSiiwWF3UbqSlGO9ABuo3UlFFgsLuo3UlFFgsLuo3UlFFgsLuo3UlFFgsHme1Lupgp1AB5ntR5ntTTSUAP8z2o8z2plFAEgfPajdTeKWgBd1G6kozQAu6ikoosFh9FFFSSI33TUVSmm1SKQ2nDiiimMKKKKACk3UfXpSGgAH3qGpKcPegBtKDTqKAE20baWigAooooAKKKKACiiigAooooAKKUUlIQUUUUxhRRRQAUUUUAFL2pKKQgoopcGgBVptL7UlABRRRTGFFFFIQmeaWiimMKKKKACiiigAooooAKKKKACiiigAooooARqQDNOooAT7tJS5FHFABtozjilpkjLGrO5CooyWY4AHrQAy8u4LG1kuLmaO3gjG55ZWCqo9ST0rynxF+0l4b0mZ4dPgudXkU48yMCOI/Rm5P5YryL4vfFa58eatJa2srxaFbviGEEjziP+Wjeuew7D3zXnOam5Nz38ftWHJz4YBHb/T/AP7VRXgK0UAfoDRRRSEJTadTapFIKKTIoJpjFpAMUmaUmgAbpSAZpf4aBx1oANtG2lpBQAtFFFABRRRQAUUUUAFFFFABRRS4oASil2mjaaQhKXdRtNLjigBM0lLtNGKAEp1Np1JiYjUY4zQwpcigBtFKRSUxjloam4pdppCAc0EYpVpaAGUpGKD1pWpjEzSk02lApCEopT1o+lMYlFLtNG00AJSkYpKXaaAEopcUlMYUUUUhBSnikxSigBKKKKYwooooAaOaXbQopaACuB+OetPovw11RojtludtqDnHDnDf+O7q76vM/wBoiza6+Gd1IoJ+z3EUpwO27b/7NSEfJhFe4fBnwL4N8eeD7yxu1P8AwkAZi8nmESRrn5GQZwR68deteINXoHwX8G654i8VW95pU8mnQWbhp75Rwo/uDsxI7dMdakki1j4J+LNL1q7sINLl1BIcFbmEARyKc4IJPXg5Hb8slfVt14v0TT76SyutVtYbuFVaSOWUKwDZxn8jRQBs0UUUAJTadTapFIbQBml4pelACEU2nGk2mmMUGjFIOtOoATPaloooAKKKKACiiigApQM0dOtG6pJAjFJRiimMKcvSkalXpSEBNJup1NxzQA6iiikIKRulI1K1MYi06kWloAKZT6bigBQaCKKWkIbmlzRx6UUxibqdSUtIQ1utOppFJimMVutOpq0feoAXbSfdo7YoAoAUUtN706kIaR3o3U6kIpjD+Gm07+Gm00NC44zQBmjPGKSgBc0vFNoosFgooopjCiiigAooooAQ1R1rSoNe0i8066Xdb3UTQuPYjGR71fooA+GvFnha+8G69daVfptmhb5XA+WRD9119iP6jqK7Hwb8cdR8E+D5dDs9PgabczQ3jNgx7uSSuPmI7cjt1r6L8efDnSPiBp/k6hFsuUGIbyMASRfj3HseP5188eJv2efFWi3B+wxR6zbZ+WS3YK+P9pGIwfoTUknnF5eT6hdS3NzK89xKxeSSQ5ZiepJorpl+E/jBmYf8I7fZU4OY8fl60UhH2pRRRQAlNxmnUxqpFISjNJSg0ALilpN1LTGN70oNLRQAUUUUAFFFKKQhKUCjI9KXdSEJmkpdpo2mmMWjbS00ipJFxmilpM0ALRRSZoAWiiigBrUueKDTaYxwNBoWhulAADS01adQAUUmaWkITFB4paTNAAKWikzQAtJS0UAJijFFIooAG60pNFBpjG96fSUtABSE0tFIQnUUYxSUu6mMbSgZpaBQA2nDpQaTaaAEoopdppjEooxRQAUUUUxhRRRQAUmKWigAxmikIzRSESUUUVJIh6Go91SN901FVIpC0lPyNtGaAGU+iimMKKKKACiiigAopevFG00hCCnbaTpS0hC0UUUhBRSUbqAFpMUZooAWkxRmigBabnmnUUANakpWoAquhXQdSUtNZqkkXGKWmZp1MYYpaKKQgpMUtFABSYpaKACiikagBaKbtNOoAaTzQ1BFCimMVelLRSNSELRSCloASjbQaFoAWiiigAooooAavWnUm6kYUxitTaMUoNMYN1pKdTaECCiiimMKKKQigBaKbtopCJaKKKkkQ9DUZFSUw00NAOlLjFJ2oAxTGLRRRTGFFFFABSmkpfu0hAvWhqdSEUhB1oopaQgopKKACjbS0m6gBGpRSNSUxitSr0pFp1ABRSEZpM4pCFNFITSU7DsOam9adRuoANopaKKQgooooAShqCKKABaWiigBpNOprdadTGNJp1JuoIzSEFIDSigjNAC0UgooAWikpaAENJk0tGaYwzRmkIoxmgAB5oagClzQAAd6Wm9aUUhA1NpxpOlMYrU2l+7SU0NBRS/do3UAJRRRTGFFFFAD6KKKggSm06m1SKQU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RRSEFFJuoagBC1L2pmPmp46UxgKWkzRmkIWim7hRigY6ikFLQIKQmhulIKYxT92m0uaSmhoKKKKYwooooAKKKTdQAtNbrS5ozQAlG6lzS0ANzSUUuKAEopdpoqSSWiiikISm06m1SKQUUUUxhRjFFFACN0ptPooAbS7RQ3SmqpoEFFFLigYlLmnMOKZSEOxS0U3rTGOopAKWgApv8VOooAKKKKACiiigAooooAKKKKACiiigAooooActIvWkopCH0UynbqQhrHmlWkNFMY7FLTQaGpCFIpOtJT6AGY+al6UfxUNTGGTRk0BqCaQgzSUUUxhRRRTGFFFJmgBaKTdRmgBaTbQ1NpCFWhutJRTGKtOplFADttGccUtFADd1FOopCH0UUVJIlNpx6GmbqpFIWik3UbqYxaKTdS0AJntS0mKWgQUUGm7aBiU5aTFKtAAWzTac1NpCH0UUUxiLS0n3aN1AA1Jk06igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKQgooopjCiiigApcmkopCCiiigAooopjCiiigAooooAa8ixlQxA3HAz3NLjNIygkZGaSkIVetLilpM0ADU2nGjbQAhFAFKaBTGG2jbS0UAFFFFABRRRQA+iiioIEb7pqKpW+6aiqkUgooopjCnLTactAC0UUUAFFFFACN0oWlpCKABqbT6KQhuTSg0tNbrQArU2iimMfSZ5pFobrQA6imrTqQhuTRk06imMRaWiigAooooAKKTNLQAUUUUAFFFFABRSNS0AFFNbrTqACjNI3SmgHNAD6KBTWoEOopoPFL92gYmeadTaVaQhaKKRqYxaRqWigBppKfRQAU1qdRQIQ0mTTqKACiiigYUUUUAFFFJuoAWik3UUASUUUVBAjfdNRVK33TUVUikFFFFMYtLxTaKAH0UgNLQAUUUUAFFFFABRRRQAU1utOpCKAG0Uu2jbSEOxTT96l3UdeaYxcUUUUAItDUAYoIzQAtBpOlJuoARSafSLS0ANagGhqNtADs0Zpu2igBTntQM0ClNAgooFJuoGHFLTadQA1qKKBQAZNHWihaQhOlOagigCmAlOpMc0tAwooooAKKTdQDmgBaKKKACiiigAooooAKM0jU2gBeaMmgmkoAcTSUlFABRRRQBNRRRUECN901FUrfdNRVSKQUUUUxhRRRQAtGTSUUAOBpaavWnUAFFFFABRRRQAUhzS0UAIM0tFFACbRS0UUAFFFFABSO6xqWZgqjqWOBS01u1AC8GgihaWgBvNGTTqbQAUZNJSr1oAMmihqSgBcmjmkpV60hCrTafTVpjCnUUjUAIopdooXpS0AJtFHApaRqQhaQ5pKdTGAooooAKKKKAEwKOnSlooAKKRulC0ALmjNMooAfmjNMooAc1NoooAKKKKACiiigAooooA/9k=");
        param1.put("namespace", "路径空间 可选");
        param1.put("customFileName", "自定义名称 可选");
        param1.put("compressType", "32x32;50x50");
        mapList.add(param1);
        param.put("files", mapList);

        String base64Str = "";


        String token = jwtToken.createToken("Content", JSON.toJSONString(mapList));
        System.out.println("token: " + token);
        boolean flag = jwtToken.verifier(token);
        System.out.println(flag);
        String json = jwtToken.getTokenValue(token, "Content");

        JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(json);
        JSONArray jsonArray = jsonObject.getJSONArray("files");
        System.out.println(jsonObject.getString("boxcode"));
        System.out.println(jsonObject.getString("apikey"));
        System.out.println(jsonObject.getString("client_id"));
        ListIterator<Object> objectListIterator = jsonArray.listIterator();
        while (objectListIterator.hasNext()) {
            JSONObject jsonObject1 = (JSONObject) objectListIterator.next();
            System.out.println(jsonObject1.toJSONString());
        }

        DecodedJWT jwt = JWT.decode(token);
        System.out.println("getHeader:  " + jwt.getHeader());
        System.out.println("getPayload:  " + jwt.getPayload());
        System.out.println("getSignature:  " + jwt.getSignature());
        System.out.println("getAlgorithm:  " + jwt.getAlgorithm());
        System.out.println("getType:  " + jwt.getType());
        System.out.println("getContentType:  " + jwt.getContentType());
        System.out.println("getIssuer:  " + jwt.getIssuer());
        System.out.println("getSubject:  " + jwt.getSubject());
        System.out.println("getAudience:  " + jwt.getAudience());
        System.out.println("getExpiresAt:  " + jwt.getExpiresAt());
        System.out.println("getNotBefore:  " + jwt.getNotBefore());
        System.out.println("getIssuedAt:  " + jwt.getIssuedAt());
        System.out.println("getId:  " + jwt.getId());
        System.out.println("getKeyId:  " + jwt.getKeyId());


    }

}
